package top.kaoshanji.p2ch16c;

/**
 * 代码清单-p2ch16c-187页a：抽象处理者
 * @author kaoshanji
 * ^_^
 * create time 2025/3/23 19:33
 */
public abstract class Handler {

    private Handler nextHandler;

    // 每个处理者都必须对请求做出处理
    public final Response handleMessage(Request request) {

        Response response = null;

        // 判断是否是自己的处理级别
        if (this.getHandlerLevel().equals(request.getRequestLevel())) {
            response = this.echo(request);
        } else { // 不属于自己的处理级别
            // 判断是否有下一个处理者
            if (this.nextHandler != null) {
                response = this.nextHandler.handleMessage(request);
            } else {
                // 没有适当的处理者，业务自行处理
            }

        }

        return response;
    }


    // 设置下一个处理者是谁
    public void setNext(Handler handler) {
        this.nextHandler = handler;
    }

    // 每个处理者都有一个处理级别
    protected abstract Level getHandlerLevel();

    // 每个处理者都必须实现处理任务
    protected abstract Response echo(Request request);

}
